<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 需求 封装一个函数 传递任意个数的数字 计算出其中最大值
        // 1、形参个数与实参个事不对应的情况
        // 1.1、形参个数多
        function fn(a, b) {
            // 调用函数系统会自动的按照实参的顺序分别赋值给形参
            // 调用函数是 系统自动执行 let a = 10 let b
            console.log(a);//10
            console.log(b);//undefined
        }
        fn(10)
        // 1.2、形参个数少
        function fn2(a) {
            // 调用函数是 系统自动执行 let a = 10
            console.log(a);//10
        }
        fn2(10, 20);
        // 2、可变参数 当调用function函数时候 系统会自动将函数调用的实参组合形参一个伪数组
        function fn3() {
            // arguments是一个伪数组(长的像数组 存在连续下标 也有length长度) 
            // 特别注意 只有真数组才可以使用后面数组的内置方法
            console.log(arguments);
            for (let i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
        }

        fn3('a', 'b', 'c')
        console.log(['a', 'b', 'c'])

        function max() {
            // 假设一个数是最大值，将所有的实参值取出来 分别与假设的进行比较 如果不满足记录现在的最大值 最终所有的都比较完毕之后就可以确定真正的最大值
            let maxValue = -Infinity;
            for (let i = 0; i < arguments.length; i++) {
                arguments[i] > maxValue && (maxValue = arguments[i]);
            }
            console.log(maxValue)
        }
        max(1, 2, 3, 4)

    </script>
</body>

</html>